/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package warmachinesystem.impl;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EGenericType;
import org.eclipse.emf.ecore.EOperation;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.impl.EPackageImpl;

import warmachinesystem.ArmyList;
import warmachinesystem.BaseUnit;
import warmachinesystem.BaseUnitTierElement;
import warmachinesystem.GameSystem;
import warmachinesystem.Solo;
import warmachinesystem.SpecialRule;
import warmachinesystem.TBFieldAllowanceDelta;
import warmachinesystem.TBFieldAllowanceRelativeDelta;
import warmachinesystem.TBFreeUnit;
import warmachinesystem.TBInGameRule;
import warmachinesystem.TBPointCostDelta;
import warmachinesystem.TRNoUnitType;
import warmachinesystem.TRUnitType;
import warmachinesystem.TierBenefit;
import warmachinesystem.TierLevel;
import warmachinesystem.TierLevelType;
import warmachinesystem.TierList;
import warmachinesystem.TierRequirement;
import warmachinesystem.Unit;
import warmachinesystem.UnitAttachment;
import warmachinesystem.UnitKind;
import warmachinesystem.UnitRule;
import warmachinesystem.UnitRuleType;
import warmachinesystem.Warcaster;
import warmachinesystem.Warjack;
import warmachinesystem.WarmachineSystemFactory;
import warmachinesystem.WarmachineSystemPackage;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class WarmachineSystemPackageImpl extends EPackageImpl implements WarmachineSystemPackage {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass gameSystemEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass armyListEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass baseUnitEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass warcasterEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass warjackEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass unitEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass soloEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass unitAttachmentEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass specialRuleEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass unitRuleEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass tierListEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass tierLevelEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass tierRequirementEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass trUnitTypeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass trNoUnitTypeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass tierBenefitEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass baseUnitTierElementEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass tbFreeUnitEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass tbFieldAllowanceDeltaEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass tbFieldAllowanceRelativeDeltaEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass tbPointCostDeltaEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass tbInGameRuleEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum unitRuleTypeEEnum = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum tierLevelTypeEEnum = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum unitKindEEnum = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see warmachinesystem.WarmachineSystemPackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private WarmachineSystemPackageImpl() {
		super(eNS_URI, WarmachineSystemFactory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
	 * 
	 * <p>This method is used to initialize {@link WarmachineSystemPackage#eINSTANCE} when that field is accessed.
	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static WarmachineSystemPackage init() {
		if (isInited) return (WarmachineSystemPackage)EPackage.Registry.INSTANCE.getEPackage(WarmachineSystemPackage.eNS_URI);

		// Obtain or create and register package
		WarmachineSystemPackageImpl theWarmachineSystemPackage = (WarmachineSystemPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof WarmachineSystemPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new WarmachineSystemPackageImpl());

		isInited = true;

		// Create package meta-data objects
		theWarmachineSystemPackage.createPackageContents();

		// Initialize created meta-data
		theWarmachineSystemPackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		theWarmachineSystemPackage.freeze();

  
		// Update the registry and return the package
		EPackage.Registry.INSTANCE.put(WarmachineSystemPackage.eNS_URI, theWarmachineSystemPackage);
		return theWarmachineSystemPackage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getGameSystem() {
		return gameSystemEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getGameSystem_Armies() {
		return (EReference)gameSystemEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getGameSystem_Name() {
		return (EAttribute)gameSystemEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getGameSystem_SpecialRules() {
		return (EReference)gameSystemEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getArmyList() {
		return armyListEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getArmyList_BaseUnits() {
		return (EReference)armyListEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getArmyList_GameSystem() {
		return (EReference)armyListEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getArmyList_Name() {
		return (EAttribute)armyListEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getArmyList_Code() {
		return (EAttribute)armyListEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getArmyList_TierLists() {
		return (EReference)armyListEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getBaseUnit() {
		return baseUnitEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getBaseUnit_ArmyList() {
		return (EReference)baseUnitEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getBaseUnit_PointCost() {
		return (EAttribute)baseUnitEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getBaseUnit_Name() {
		return (EAttribute)baseUnitEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getBaseUnit_UnitRules() {
		return (EReference)baseUnitEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getBaseUnit_FieldAllowance() {
		return (EAttribute)baseUnitEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getBaseUnit_Tag() {
		return (EAttribute)baseUnitEClass.getEStructuralFeatures().get(6);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getBaseUnit_Kind() {
		return (EAttribute)baseUnitEClass.getEStructuralFeatures().get(7);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getBaseUnit_Code() {
		return (EAttribute)baseUnitEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getWarcaster() {
		return warcasterEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getWarcaster_Focus() {
		return (EAttribute)warcasterEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getWarcaster_Damage() {
		return (EAttribute)warcasterEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getWarjack() {
		return warjackEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getUnit() {
		return unitEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getUnit_BaseModelNumber() {
		return (EAttribute)unitEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getUnit_Increment() {
		return (EAttribute)unitEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getUnit_MaxModelNumber() {
		return (EAttribute)unitEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getUnit_IncrementCost() {
		return (EAttribute)unitEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getSolo() {
		return soloEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSolo_Damage() {
		return (EAttribute)soloEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getUnitAttachment() {
		return unitAttachmentEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getUnitAttachment_AttachableUnits() {
		return (EReference)unitAttachmentEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getSpecialRule() {
		return specialRuleEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSpecialRule_Name() {
		return (EAttribute)specialRuleEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSpecialRule_Description() {
		return (EAttribute)specialRuleEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSpecialRule_Code() {
		return (EAttribute)specialRuleEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getUnitRule() {
		return unitRuleEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getUnitRule_Type() {
		return (EAttribute)unitRuleEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTierList() {
		return tierListEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getTierList_Warcaster() {
		return (EReference)tierListEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getTierList_Levels() {
		return (EReference)tierListEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getTierList_AllowedUnits() {
		return (EReference)tierListEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTierLevel() {
		return tierLevelEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTierLevel_Level() {
		return (EAttribute)tierLevelEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getTierLevel_Benefits() {
		return (EReference)tierLevelEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTierRequirement() {
		return tierRequirementEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTRUnitType() {
		return trUnitTypeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTRUnitType_Min() {
		return (EAttribute)trUnitTypeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTRUnitType_Max() {
		return (EAttribute)trUnitTypeEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTRNoUnitType() {
		return trNoUnitTypeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTierBenefit() {
		return tierBenefitEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getBaseUnitTierElement() {
		return baseUnitTierElementEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getBaseUnitTierElement_UnitType() {
		return (EReference)baseUnitTierElementEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getBaseUnitTierElement_UnitTag() {
		return (EAttribute)baseUnitTierElementEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getBaseUnitTierElement_UnitKind() {
		return (EAttribute)baseUnitTierElementEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTBFreeUnit() {
		return tbFreeUnitEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTBFreeUnit_NumberUnit() {
		return (EAttribute)tbFreeUnitEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTBFieldAllowanceDelta() {
		return tbFieldAllowanceDeltaEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTBFieldAllowanceDelta_FieldAllowance() {
		return (EAttribute)tbFieldAllowanceDeltaEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTBFieldAllowanceRelativeDelta() {
		return tbFieldAllowanceRelativeDeltaEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getTBFieldAllowanceRelativeDelta_ReferenceUnit() {
		return (EReference)tbFieldAllowanceRelativeDeltaEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTBPointCostDelta() {
		return tbPointCostDeltaEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTBPointCostDelta_PointCostDelta() {
		return (EAttribute)tbPointCostDeltaEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTBInGameRule() {
		return tbInGameRuleEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTBInGameRule_Description() {
		return (EAttribute)tbInGameRuleEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getTierLevel_Requirements() {
		return (EReference)tierLevelEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getUnitRuleType() {
		return unitRuleTypeEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getTierLevelType() {
		return tierLevelTypeEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getUnitKind() {
		return unitKindEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public WarmachineSystemFactory getWarmachineSystemFactory() {
		return (WarmachineSystemFactory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		gameSystemEClass = createEClass(GAME_SYSTEM);
		createEReference(gameSystemEClass, GAME_SYSTEM__ARMIES);
		createEAttribute(gameSystemEClass, GAME_SYSTEM__NAME);
		createEReference(gameSystemEClass, GAME_SYSTEM__SPECIAL_RULES);

		armyListEClass = createEClass(ARMY_LIST);
		createEReference(armyListEClass, ARMY_LIST__BASE_UNITS);
		createEReference(armyListEClass, ARMY_LIST__GAME_SYSTEM);
		createEAttribute(armyListEClass, ARMY_LIST__NAME);
		createEAttribute(armyListEClass, ARMY_LIST__CODE);
		createEReference(armyListEClass, ARMY_LIST__TIER_LISTS);

		baseUnitEClass = createEClass(BASE_UNIT);
		createEAttribute(baseUnitEClass, BASE_UNIT__CODE);
		createEReference(baseUnitEClass, BASE_UNIT__ARMY_LIST);
		createEAttribute(baseUnitEClass, BASE_UNIT__POINT_COST);
		createEAttribute(baseUnitEClass, BASE_UNIT__NAME);
		createEReference(baseUnitEClass, BASE_UNIT__UNIT_RULES);
		createEAttribute(baseUnitEClass, BASE_UNIT__FIELD_ALLOWANCE);
		createEAttribute(baseUnitEClass, BASE_UNIT__TAG);
		createEAttribute(baseUnitEClass, BASE_UNIT__KIND);

		warcasterEClass = createEClass(WARCASTER);
		createEAttribute(warcasterEClass, WARCASTER__FOCUS);
		createEAttribute(warcasterEClass, WARCASTER__DAMAGE);

		warjackEClass = createEClass(WARJACK);

		unitEClass = createEClass(UNIT);
		createEAttribute(unitEClass, UNIT__BASE_MODEL_NUMBER);
		createEAttribute(unitEClass, UNIT__INCREMENT);
		createEAttribute(unitEClass, UNIT__MAX_MODEL_NUMBER);
		createEAttribute(unitEClass, UNIT__INCREMENT_COST);

		soloEClass = createEClass(SOLO);
		createEAttribute(soloEClass, SOLO__DAMAGE);

		unitAttachmentEClass = createEClass(UNIT_ATTACHMENT);
		createEReference(unitAttachmentEClass, UNIT_ATTACHMENT__ATTACHABLE_UNITS);

		specialRuleEClass = createEClass(SPECIAL_RULE);
		createEAttribute(specialRuleEClass, SPECIAL_RULE__NAME);
		createEAttribute(specialRuleEClass, SPECIAL_RULE__DESCRIPTION);
		createEAttribute(specialRuleEClass, SPECIAL_RULE__CODE);

		unitRuleEClass = createEClass(UNIT_RULE);
		createEAttribute(unitRuleEClass, UNIT_RULE__TYPE);

		tierListEClass = createEClass(TIER_LIST);
		createEReference(tierListEClass, TIER_LIST__WARCASTER);
		createEReference(tierListEClass, TIER_LIST__LEVELS);
		createEReference(tierListEClass, TIER_LIST__ALLOWED_UNITS);

		tierLevelEClass = createEClass(TIER_LEVEL);
		createEAttribute(tierLevelEClass, TIER_LEVEL__LEVEL);
		createEReference(tierLevelEClass, TIER_LEVEL__REQUIREMENTS);
		createEReference(tierLevelEClass, TIER_LEVEL__BENEFITS);

		tierRequirementEClass = createEClass(TIER_REQUIREMENT);

		trUnitTypeEClass = createEClass(TR_UNIT_TYPE);
		createEAttribute(trUnitTypeEClass, TR_UNIT_TYPE__MIN);
		createEAttribute(trUnitTypeEClass, TR_UNIT_TYPE__MAX);

		trNoUnitTypeEClass = createEClass(TR_NO_UNIT_TYPE);

		tierBenefitEClass = createEClass(TIER_BENEFIT);

		baseUnitTierElementEClass = createEClass(BASE_UNIT_TIER_ELEMENT);
		createEReference(baseUnitTierElementEClass, BASE_UNIT_TIER_ELEMENT__UNIT_TYPE);
		createEAttribute(baseUnitTierElementEClass, BASE_UNIT_TIER_ELEMENT__UNIT_TAG);
		createEAttribute(baseUnitTierElementEClass, BASE_UNIT_TIER_ELEMENT__UNIT_KIND);

		tbFreeUnitEClass = createEClass(TB_FREE_UNIT);
		createEAttribute(tbFreeUnitEClass, TB_FREE_UNIT__NUMBER_UNIT);

		tbFieldAllowanceDeltaEClass = createEClass(TB_FIELD_ALLOWANCE_DELTA);
		createEAttribute(tbFieldAllowanceDeltaEClass, TB_FIELD_ALLOWANCE_DELTA__FIELD_ALLOWANCE);

		tbFieldAllowanceRelativeDeltaEClass = createEClass(TB_FIELD_ALLOWANCE_RELATIVE_DELTA);
		createEReference(tbFieldAllowanceRelativeDeltaEClass, TB_FIELD_ALLOWANCE_RELATIVE_DELTA__REFERENCE_UNIT);

		tbPointCostDeltaEClass = createEClass(TB_POINT_COST_DELTA);
		createEAttribute(tbPointCostDeltaEClass, TB_POINT_COST_DELTA__POINT_COST_DELTA);

		tbInGameRuleEClass = createEClass(TB_IN_GAME_RULE);
		createEAttribute(tbInGameRuleEClass, TB_IN_GAME_RULE__DESCRIPTION);

		// Create enums
		unitRuleTypeEEnum = createEEnum(UNIT_RULE_TYPE);
		tierLevelTypeEEnum = createEEnum(TIER_LEVEL_TYPE);
		unitKindEEnum = createEEnum(UNIT_KIND);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		warcasterEClass.getESuperTypes().add(this.getBaseUnit());
		warjackEClass.getESuperTypes().add(this.getBaseUnit());
		unitEClass.getESuperTypes().add(this.getBaseUnit());
		soloEClass.getESuperTypes().add(this.getBaseUnit());
		unitAttachmentEClass.getESuperTypes().add(this.getBaseUnit());
		unitRuleEClass.getESuperTypes().add(this.getSpecialRule());
		trUnitTypeEClass.getESuperTypes().add(this.getBaseUnitTierElement());
		trUnitTypeEClass.getESuperTypes().add(this.getTierRequirement());
		trNoUnitTypeEClass.getESuperTypes().add(this.getTRUnitType());
		tbFreeUnitEClass.getESuperTypes().add(this.getBaseUnitTierElement());
		tbFreeUnitEClass.getESuperTypes().add(this.getTierBenefit());
		tbFieldAllowanceDeltaEClass.getESuperTypes().add(this.getBaseUnitTierElement());
		tbFieldAllowanceDeltaEClass.getESuperTypes().add(this.getTierBenefit());
		tbFieldAllowanceRelativeDeltaEClass.getESuperTypes().add(this.getTBFieldAllowanceDelta());
		tbPointCostDeltaEClass.getESuperTypes().add(this.getBaseUnitTierElement());
		tbPointCostDeltaEClass.getESuperTypes().add(this.getTierBenefit());
		tbInGameRuleEClass.getESuperTypes().add(this.getTierBenefit());

		// Initialize classes and features; add operations and parameters
		initEClass(gameSystemEClass, GameSystem.class, "GameSystem", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getGameSystem_Armies(), this.getArmyList(), this.getArmyList_GameSystem(), "armies", null, 0, -1, GameSystem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getGameSystem_Name(), ecorePackage.getEString(), "name", null, 0, 1, GameSystem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getGameSystem_SpecialRules(), this.getSpecialRule(), null, "specialRules", null, 0, -1, GameSystem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		EOperation op = addEOperation(gameSystemEClass, this.getArmyList(), "getArmyByCode", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, ecorePackage.getEString(), "code", 0, 1, IS_UNIQUE, IS_ORDERED);

		initEClass(armyListEClass, ArmyList.class, "ArmyList", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getArmyList_BaseUnits(), this.getBaseUnit(), this.getBaseUnit_ArmyList(), "baseUnits", null, 1, -1, ArmyList.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getArmyList_GameSystem(), this.getGameSystem(), this.getGameSystem_Armies(), "gameSystem", null, 0, 1, ArmyList.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getArmyList_Name(), ecorePackage.getEString(), "name", null, 0, 1, ArmyList.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getArmyList_Code(), ecorePackage.getEString(), "code", null, 0, 1, ArmyList.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getArmyList_TierLists(), this.getTierList(), null, "tierLists", null, 0, -1, ArmyList.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		op = addEOperation(armyListEClass, null, "getWarcasters", 0, 1, IS_UNIQUE, IS_ORDERED);
		EGenericType g1 = createEGenericType(ecorePackage.getEEList());
		EGenericType g2 = createEGenericType(this.getWarcaster());
		g1.getETypeArguments().add(g2);
		initEOperation(op, g1);

		op = addEOperation(armyListEClass, null, "getWarjacks", 0, 1, IS_UNIQUE, IS_ORDERED);
		g1 = createEGenericType(ecorePackage.getEEList());
		g2 = createEGenericType(this.getWarjack());
		g1.getETypeArguments().add(g2);
		initEOperation(op, g1);

		op = addEOperation(armyListEClass, null, "getUnits", 0, 1, IS_UNIQUE, IS_ORDERED);
		g1 = createEGenericType(ecorePackage.getEEList());
		g2 = createEGenericType(this.getUnit());
		g1.getETypeArguments().add(g2);
		initEOperation(op, g1);

		op = addEOperation(armyListEClass, null, "getSolos", 0, 1, IS_UNIQUE, IS_ORDERED);
		g1 = createEGenericType(ecorePackage.getEEList());
		g2 = createEGenericType(this.getSolo());
		g1.getETypeArguments().add(g2);
		initEOperation(op, g1);

		op = addEOperation(armyListEClass, null, "getUnitAttachments", 0, 1, IS_UNIQUE, IS_ORDERED);
		g1 = createEGenericType(ecorePackage.getEEList());
		g2 = createEGenericType(this.getUnitAttachment());
		g1.getETypeArguments().add(g2);
		initEOperation(op, g1);

		op = addEOperation(armyListEClass, null, "getUnitAttachments", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, this.getBaseUnit(), "unit", 0, 1, IS_UNIQUE, IS_ORDERED);
		g1 = createEGenericType(ecorePackage.getEEList());
		g2 = createEGenericType(this.getUnitAttachment());
		g1.getETypeArguments().add(g2);
		initEOperation(op, g1);

		op = addEOperation(armyListEClass, this.getBaseUnit(), "getBaseUnitByCode", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, ecorePackage.getEString(), "code", 0, 1, IS_UNIQUE, IS_ORDERED);

		op = addEOperation(armyListEClass, null, "getBaseUnitsByTag", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, ecorePackage.getEString(), "tag", 0, 1, IS_UNIQUE, IS_ORDERED);
		g1 = createEGenericType(ecorePackage.getEEList());
		g2 = createEGenericType(this.getBaseUnit());
		g1.getETypeArguments().add(g2);
		initEOperation(op, g1);

		op = addEOperation(armyListEClass, null, "getBaseUnitsByTag", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, ecorePackage.getEString(), "tag", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, this.getUnitKind(), "kind", 0, 1, IS_UNIQUE, IS_ORDERED);
		g1 = createEGenericType(ecorePackage.getEEList());
		g2 = createEGenericType(this.getBaseUnit());
		g1.getETypeArguments().add(g2);
		initEOperation(op, g1);

		op = addEOperation(armyListEClass, this.getTierList(), "getTierList", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, this.getWarcaster(), "warcaster", 0, 1, IS_UNIQUE, IS_ORDERED);

		initEClass(baseUnitEClass, BaseUnit.class, "BaseUnit", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getBaseUnit_Code(), ecorePackage.getEString(), "code", null, 0, 1, BaseUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getBaseUnit_ArmyList(), this.getArmyList(), this.getArmyList_BaseUnits(), "armyList", null, 1, 1, BaseUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getBaseUnit_PointCost(), ecorePackage.getEInt(), "pointCost", null, 0, 1, BaseUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getBaseUnit_Name(), ecorePackage.getEString(), "name", null, 0, 1, BaseUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getBaseUnit_UnitRules(), this.getSpecialRule(), null, "unitRules", null, 0, -1, BaseUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getBaseUnit_FieldAllowance(), ecorePackage.getEString(), "fieldAllowance", null, 0, 1, BaseUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getBaseUnit_Tag(), ecorePackage.getEString(), "tag", null, 0, 1, BaseUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getBaseUnit_Kind(), this.getUnitKind(), "kind", null, 0, 1, BaseUnit.class, !IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED);

		initEClass(warcasterEClass, Warcaster.class, "Warcaster", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getWarcaster_Focus(), ecorePackage.getEInt(), "focus", null, 0, 1, Warcaster.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getWarcaster_Damage(), ecorePackage.getEInt(), "damage", null, 0, 1, Warcaster.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(warjackEClass, Warjack.class, "Warjack", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(unitEClass, Unit.class, "Unit", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getUnit_BaseModelNumber(), ecorePackage.getEInt(), "baseModelNumber", null, 0, 1, Unit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getUnit_Increment(), ecorePackage.getEInt(), "increment", null, 0, 1, Unit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getUnit_MaxModelNumber(), ecorePackage.getEInt(), "maxModelNumber", null, 0, 1, Unit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getUnit_IncrementCost(), ecorePackage.getEInt(), "incrementCost", null, 0, 1, Unit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(soloEClass, Solo.class, "Solo", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getSolo_Damage(), ecorePackage.getEInt(), "damage", null, 0, 1, Solo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(unitAttachmentEClass, UnitAttachment.class, "UnitAttachment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getUnitAttachment_AttachableUnits(), this.getUnit(), null, "attachableUnits", null, 1, -1, UnitAttachment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(specialRuleEClass, SpecialRule.class, "SpecialRule", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getSpecialRule_Name(), ecorePackage.getEString(), "name", null, 0, 1, SpecialRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getSpecialRule_Description(), ecorePackage.getEString(), "description", null, 0, 1, SpecialRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getSpecialRule_Code(), ecorePackage.getEString(), "code", null, 0, 1, SpecialRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(unitRuleEClass, UnitRule.class, "UnitRule", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getUnitRule_Type(), this.getUnitRuleType(), "type", null, 0, 1, UnitRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(tierListEClass, TierList.class, "TierList", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getTierList_Warcaster(), this.getWarcaster(), null, "warcaster", null, 0, 1, TierList.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getTierList_Levels(), this.getTierLevel(), null, "levels", null, 4, 4, TierList.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getTierList_AllowedUnits(), this.getBaseUnit(), null, "allowedUnits", null, 0, -1, TierList.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(tierLevelEClass, TierLevel.class, "TierLevel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getTierLevel_Level(), this.getTierLevelType(), "level", null, 0, 1, TierLevel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getTierLevel_Requirements(), this.getTierRequirement(), null, "requirements", null, 0, -1, TierLevel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getTierLevel_Benefits(), this.getTierBenefit(), null, "benefits", null, 0, -1, TierLevel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(tierRequirementEClass, TierRequirement.class, "TierRequirement", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		op = addEOperation(tierRequirementEClass, ecorePackage.getEBoolean(), "isMet", 0, 1, IS_UNIQUE, IS_ORDERED);
		g1 = createEGenericType(ecorePackage.getEMap());
		g2 = createEGenericType(this.getBaseUnit());
		g1.getETypeArguments().add(g2);
		g2 = createEGenericType();
		g1.getETypeArguments().add(g2);
		addEParameter(op, g1, "unitMap", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, this.getArmyList(), "armyList", 0, 1, IS_UNIQUE, IS_ORDERED);

		initEClass(trUnitTypeEClass, TRUnitType.class, "TRUnitType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getTRUnitType_Min(), ecorePackage.getEInt(), "min", null, 0, 1, TRUnitType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getTRUnitType_Max(), ecorePackage.getEInt(), "max", null, 0, 1, TRUnitType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(trNoUnitTypeEClass, TRNoUnitType.class, "TRNoUnitType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(tierBenefitEClass, TierBenefit.class, "TierBenefit", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(baseUnitTierElementEClass, BaseUnitTierElement.class, "BaseUnitTierElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getBaseUnitTierElement_UnitType(), this.getBaseUnit(), null, "unitType", null, 0, 1, BaseUnitTierElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getBaseUnitTierElement_UnitTag(), ecorePackage.getEString(), "unitTag", null, 0, 1, BaseUnitTierElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getBaseUnitTierElement_UnitKind(), this.getUnitKind(), "unitKind", null, 0, 1, BaseUnitTierElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		op = addEOperation(baseUnitTierElementEClass, null, "getAffectedUnits", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, this.getArmyList(), "armyList", 0, 1, IS_UNIQUE, IS_ORDERED);
		g1 = createEGenericType(ecorePackage.getEEList());
		g2 = createEGenericType(this.getBaseUnit());
		g1.getETypeArguments().add(g2);
		initEOperation(op, g1);

		initEClass(tbFreeUnitEClass, TBFreeUnit.class, "TBFreeUnit", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getTBFreeUnit_NumberUnit(), ecorePackage.getEInt(), "numberUnit", null, 0, 1, TBFreeUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(tbFieldAllowanceDeltaEClass, TBFieldAllowanceDelta.class, "TBFieldAllowanceDelta", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getTBFieldAllowanceDelta_FieldAllowance(), ecorePackage.getEString(), "fieldAllowance", null, 0, 1, TBFieldAllowanceDelta.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(tbFieldAllowanceRelativeDeltaEClass, TBFieldAllowanceRelativeDelta.class, "TBFieldAllowanceRelativeDelta", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getTBFieldAllowanceRelativeDelta_ReferenceUnit(), this.getBaseUnit(), null, "referenceUnit", null, 0, 1, TBFieldAllowanceRelativeDelta.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(tbPointCostDeltaEClass, TBPointCostDelta.class, "TBPointCostDelta", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getTBPointCostDelta_PointCostDelta(), ecorePackage.getEInt(), "pointCostDelta", null, 0, 1, TBPointCostDelta.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(tbInGameRuleEClass, TBInGameRule.class, "TBInGameRule", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getTBInGameRule_Description(), ecorePackage.getEString(), "description", null, 0, 1, TBInGameRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		// Initialize enums and add enum literals
		initEEnum(unitRuleTypeEEnum, UnitRuleType.class, "UnitRuleType");
		addEEnumLiteral(unitRuleTypeEEnum, UnitRuleType.FEAT);
		addEEnumLiteral(unitRuleTypeEEnum, UnitRuleType.SPELL);

		initEEnum(tierLevelTypeEEnum, TierLevelType.class, "TierLevelType");
		addEEnumLiteral(tierLevelTypeEEnum, TierLevelType.NO_TIER);
		addEEnumLiteral(tierLevelTypeEEnum, TierLevelType.T1);
		addEEnumLiteral(tierLevelTypeEEnum, TierLevelType.T2);
		addEEnumLiteral(tierLevelTypeEEnum, TierLevelType.T3);
		addEEnumLiteral(tierLevelTypeEEnum, TierLevelType.T4);

		initEEnum(unitKindEEnum, UnitKind.class, "UnitKind");
		addEEnumLiteral(unitKindEEnum, UnitKind.UNIT);
		addEEnumLiteral(unitKindEEnum, UnitKind.SOLO);
		addEEnumLiteral(unitKindEEnum, UnitKind.WARJACK);
		addEEnumLiteral(unitKindEEnum, UnitKind.WARCASTER);
		addEEnumLiteral(unitKindEEnum, UnitKind.UNIT_ATTACHMENT);

		// Create resource
		createResource(eNS_URI);

		// Create annotations
		// http:///org/eclipse/emf/ecore/util/ExtendedMetaData
		createExtendedMetaDataAnnotations();
	}

	/**
	 * Initializes the annotations for <b>http:///org/eclipse/emf/ecore/util/ExtendedMetaData</b>.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected void createExtendedMetaDataAnnotations() {
		String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData";		
		addAnnotation
		  (getBaseUnit_ArmyList(), 
		   source, 
		   new String[] {
		   });
	}

} //WarmachineSystemPackageImpl
